package cn.hs.ph.dao.impl;

import cn.hs.ph.dao.CourierStationDao;
import cn.hs.ph.entity.CourierStation;
import cn.hs.ph.util.JDBCDruidUtil;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class CourierStationDaoImpl implements CourierStationDao {
    @Override
    public int insert(CourierStation courierStation) {
        String sql = "insert into CourierStation values(now(),?,?,?,?,?,null,?,?,?,?,?,?)";
        Object obj[] = {
                courierStation.getCourierStationAddress(),
                courierStation.getCourierStationCity(),
                courierStation.getCourierStationCommunityId(),
                courierStation.getCourierStationCommunityName(),
                courierStation.getCourierStationDistrict(),
//                courierStation.getCourierStationId(),
                courierStation.getCourierStationImage(),
                courierStation.getCourierStationName(),
                courierStation.getCourierStationOrderCount(),
                courierStation.getCourierStationProvince(),
                courierStation.getCourierStationSort(),
                courierStation.getCourierStationStatus()
        };
        return JDBCDruidUtil.update(sql, obj);
    }

    @Override
    public int delete(int courierStationId) {
        String sql = "delete from courierStation where courierStationId=?";
        Object[] obj = new Object[]{courierStationId};
        return JDBCDruidUtil.update(sql, obj);
    }
    @Override
    public int update(CourierStation courierStation) {
        String sql = "update CourierStation set courierStationAddress=?,courierStationCity=?,courierStationCommunityId=?,courierStationDistrict=?,courierStationImage=?,courierStationName=?,courierStationProvince=? where courierStationId=?";
        Object[] obj = new Object[]{
                courierStation.getCourierStationAddress(),
                courierStation.getCourierStationCity(),
                courierStation.getCourierStationCommunityId(),
                courierStation.getCourierStationDistrict(),
                courierStation.getCourierStationImage(),
                courierStation.getCourierStationName(),
                courierStation.getCourierStationProvince(),
                courierStation.getCourierStationId()
        };
        return JDBCDruidUtil.update(sql, obj);
    }

    @Override
    public List<CourierStation> selectAll(Map<String, String> map) {
        List<CourierStation> list = new ArrayList<>();
        //分页查询 模糊查询 时间范围查询
        String sql = "select * from courierStation where 1=1";
        List<Object> params = new ArrayList<>();
        //判断是否需要进行模糊查询，小区名称
        String communityName = map.get("communityName");
        if (communityName != null && !"".equals(communityName)) {
            sql += " and courierStationCommunityName like ?";
            params.add("%" + communityName + "%");
        }
        //判断是否需要进行模糊查询，驿站名称
        String courierStationName = map.get("courierStationName");
        if (courierStationName != null && !"".equals(courierStationName)) {
            sql += " and courierStationName like ?";
            params.add("%" + courierStationName + "%");
        }
        //判断是否需要时间范围查询
        String startTime = map.get("startTime");
        if (startTime != null && !"".equals(startTime)) {
            sql += " and addTime between ? and ?";
            String endTime = map.get("endTime");
            params.add(startTime);
            params.add(endTime);
        }
        sql+=" order by courierStationId desc";
        //判断是否需要分页查询
        String pn = map.get("pageNum");
        if (pn != null && !"".equals(pn)) {
            sql += " limit ?,?";
            int pageNum = Integer.parseInt(pn);
            int pageSize = Integer.parseInt(map.get("pageSize"));
            params.add((pageNum - 1) * pageSize);
            params.add(pageSize);
        }
        Object[] obj = params.toArray();
        ResultSet res = JDBCDruidUtil.query(sql, obj);
        while (true) {
            try {
                if (!res.next()) break;
               CourierStation courierStation=new CourierStation(
                       res.getDate(1),
                       res.getString(2),
                       res.getString(3),
                       res.getInt(4),
                       res.getString(5),
                       res.getString(6),
                       res.getInt(7),
                       res.getString(8),
                       res.getString(9),
                       res.getInt(10),
                       res.getString(11),
                       res.getInt(12),
                       res.getInt(13)
               );
               list.add(courierStation);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        JDBCDruidUtil.close();
        return list;
    }

    @Override
    public int selectCount(Map<String, String> map) {
       int count=0;
        //分页查询 模糊查询 时间范围查询
        String sql = "select count(1) from courierStation where 1=1";
        List<Object> params = new ArrayList<>();
        //判断是否需要进行模糊查询，小区名称
        String communityName = map.get("communityName");
        if (communityName != null && !"".equals(communityName)) {
            sql += " and courierStationCommunityName like ?";
            params.add("%" + communityName + "%");
        }
        //判断是否需要进行模糊查询，驿站名称
        String courierStationName = map.get("courierStationName");
        if (courierStationName != null && !"".equals(courierStationName)) {
            sql += " and courierStationName like ?";
            params.add("%" + courierStationName + "%");
        }
        //判断是否需要时间范围查询
        String startTime = map.get("startTime");
        if (startTime != null && !"".equals(startTime)) {
            sql += " and addTime between ? and ?";
            String endTime = map.get("endTime");
            params.add(startTime);
            params.add(endTime);
        }
        Object[] obj = params.toArray();

        ResultSet res = JDBCDruidUtil.query(sql, obj);
        while (true) {
            try {
                if (!res.next()) break;
                count=res.getInt(1);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        JDBCDruidUtil.close();
        return count;
    }
}
